﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BlackoutRugby.servicios.equipo;
using BlackoutRugby.Models.Plantilla;
using BlackoutRugby.entity.jugador;

namespace BlackoutRugbyWeb.Controllers
{
    public class PlantillaController : Controller
    {
        //
        // GET: /Plantilla/
        private ServicioEquipo srvEquipo;
        int idEquipo;

        public ActionResult Index(int idEquipo = 0)//82565
        {
            if (Session != null && Session["idEquipo"] != null)
                actualizarServicios((int)Session["idEquipo"]);


            var model = new ModeloIndex()
            {
                jugadores = srvEquipo.recuperarPlantilla((int)Session["idEquipo"])
            };

            Session.Add("plantilla", model.jugadores);

            return View(model);
        }

        private void actualizarServicios(int p)
        {
            srvEquipo = ServicioEquipo.getInstance(p);
        }


        public ActionResult OrdenarPlantilla(string id = "CSR")
        { 

            List<JugadorEntity> js = (List<JugadorEntity>)Session["plantilla"];
            
            switch (id)
            {
                case "Agilidad": js = js.OrderByDescending(j => j.agilidad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Agresividad": js = js.OrderByDescending(j => j.agresividad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Altura": js = js.OrderByDescending(j => j.altura).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Apellido": js = js.OrderByDescending(j => j.apellido).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Ataque": js = js.OrderByDescending(j => j.ataque).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "CSR": js = js.OrderByDescending(j => j.csr).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Defensa": js = js.OrderByDescending(j => j.defensa).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Disciplina": js = js.OrderByDescending(j => j.disciplina).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Edad": js = js.OrderByDescending(j => j.edad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Energia": js = js.OrderByDescending(j => j.energia).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Experiencia": js = js.OrderByDescending(j => j.experiencia).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Forma": js = js.OrderByDescending(j => j.forma).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Fuerza": js = js.OrderByDescending(j => j.fuerza).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Liderazgo": js = js.OrderByDescending(j => j.liderazgo).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Manejo": js = js.OrderByDescending(j => j.manejo).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Mano": js = js.OrderByDescending(j => j.mano).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Nacionalidad": js = js.OrderByDescending(j => j.nacionalidad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Nombre": js = js.OrderByDescending(j => j.nombre).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Pateo": js = js.OrderByDescending(j => j.pateo).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Peso": js = js.OrderByDescending(j => j.peso).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Pie": js = js.OrderByDescending(j => j.pie).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Resistencia": js = js.OrderByDescending(j => j.resistencia).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "salario": js = js.OrderByDescending(j => j.salario).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Salto": js = js.OrderByDescending(j => j.salto).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Técnica": js = js.OrderByDescending(j => j.tecnica).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                case "Velocidad": js = js.OrderByDescending(j => j.velocidad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;
                default: js = js.OrderByDescending(j => j.edad).ThenByDescending(j => j.csr).ToList<JugadorEntity>(); break;

            }

            var model = new ModeloIndex()
            {
                jugadores = js
            };

            return PartialView("~/Views/Shared/Plantilla/PartialPlantilla.cshtml", model);
        }

        public ActionResult MejorEquipo(int id = 0)// 82565
        {
            if (Session != null && Session["idEquipo"] != null)
                actualizarServicios((int)Session["idEquipo"]);

            List<JugadorEntity> js;

            if(Session["plantilla"] == null)
            {
                js = srvEquipo.recuperarPlantilla((int)Session["idEquipo"]);
                Session["plantilla"] = js;
            }
            else
               js  = (List<JugadorEntity>)Session["plantilla"];



            return View("~/Views/Plantilla/CalcularMejorAlineacion.cshtml");
        
        
        }

        public ActionResult CalcularMejorAlineacion(string id)
        {

            List<JugadorEntity> js = (List<JugadorEntity>)Session["plantilla"];

            if (js == null)
            {
                throw new ArgumentNullException("No se encuentra el equipo en la sesion");
            }


            switch (id)
            {
                case "boards.ie": js = calcularAlineacionSegunBoards(id, js); break;
                case "blackoutrugbyengland.myfreeforum.org": js = calcularAlineacionSegunBlackoutrugbyengland(id, js); break;
                case "hkblackout.motionforum.net": js = calcularAlineacionSegunHkblackout(id, js); break;
                case "walesbr.forum7.biz": js = calcularAlineacionSegunWalesbr(id, js); break;
                case "Mi_criterio": js = calcularAlineacionSegunMicriterio(id, js); break;
            }


            var equipoA = js.GetRange(1, 15);
            var equipoB = js.GetRange(16, 15);
            JugadorEntity capitanA = obtenerCapitan(equipoA);
            JugadorEntity capitanB = obtenerCapitan(equipoB);
            JugadorEntity pateadorA = obtenerPateador(equipoA);
            JugadorEntity pateadorB = obtenerPateador(equipoB);

            var model = new ModeloAlineacion(js);

            model.pateadorA = pateadorA;
            model.pateadorB = pateadorB;
            model.capitanA = capitanA;
            model.capitanB = capitanB;

            return PartialView("~/Views/Plantilla/MejorEquipo.cshtml", model);
        }

        private JugadorEntity obtenerPateador(List<JugadorEntity> equipoA)
        {
            JugadorEntity pat = new JugadorEntity();
            pat.pateo = new BlackoutRugby.enums.jugador.TipoHabilidad(BlackoutRugby.enums.jugador.TipoHabilidad.Tipo.Inexistente);
            foreach (JugadorEntity j in equipoA)
            {
                try { j.experiencia.toInt(); }
                catch (Exception e) { continue; }
                
                if (j.pateo.toInt() > pat.pateo.toInt())
                    pat = j;
            }
            return pat;
        }

        private JugadorEntity obtenerCapitan(List<JugadorEntity> equipoA)
        {

            JugadorEntity capi = new JugadorEntity();
            capi.experiencia = new BlackoutRugby.enums.jugador.TipoFLE(BlackoutRugby.enums.jugador.TipoFLE.Tipo.Inexistente);
            capi.liderazgo = new BlackoutRugby.enums.jugador.TipoFLE(BlackoutRugby.enums.jugador.TipoFLE.Tipo.Inexistente);
            foreach (JugadorEntity j in equipoA)
            {
                try { j.experiencia.toInt(); }
                catch (Exception e) { continue; }
                if (j.experiencia.toInt() * 2 + j.liderazgo.toInt() > capi.experiencia.toInt() * 2 + capi.liderazgo.toInt())
                    capi = j;
            }
            return capi;
        }

        private List<JugadorEntity> calcularAlineacionSegunMicriterio(string tipoAlineacion, List<JugadorEntity> js)
        {
            //TIENE QUE HABER UNA MANERA DE MEJORAR LA GESTION DE LOS INDICES DE LAS LISTAS

            List<JugadorEntity> alineacionDefitiva = new List<JugadorEntity>();
            List<JugadorEntity> plantillaTemp = new List<JugadorEntity>();
            plantillaTemp.AddRange(js);

            for (int i = 0; i < 31; i++)
                alineacionDefitiva.Add(new JugadorEntity());

            JugadorEntity jugadorElegido = new JugadorEntity();

            jugadorElegido = obtenerTalona(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[2] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerPilier(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[1] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerPilier(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[3] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerLock(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[5] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerLock( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[4] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerMM(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[9] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerApertura(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[10] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerZaguero(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[15] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtener8(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[8] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerFlankerAbierto(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[7] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);
            
            jugadorElegido = obtenerFlankerCerrado(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[6] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerCentro(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[12] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerCentro( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[13] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);            

            jugadorElegido = obtenerAla(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[11] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerAla( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[14] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);


            jugadorElegido = obtenerTalona(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[17] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerPilier(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[16] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerPilier(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[18] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerLock(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[20] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerLock( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[19] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerMM(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[24] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerApertura(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[25] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerZaguero(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[30] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtener8(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[23] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerFlankerAbierto(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[22] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);
            
            jugadorElegido = obtenerFlankerCerrado(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[21] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerCentro(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[27] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerCentro( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[28] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);            

            jugadorElegido = obtenerAla(plantillaTemp, tipoAlineacion);
            alineacionDefitiva[26] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = obtenerAla( plantillaTemp, tipoAlineacion);
            alineacionDefitiva[29] = jugadorElegido;
            plantillaTemp.Remove(jugadorElegido);




            //////////RESERVAS/////////////////////
            /*jugadorElegido = obtener8(16, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(16, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(17, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(17, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(18, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(18, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(19, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(19, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(20, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(20, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(21, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(21, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido);

            jugadorElegido = calculaMejorjugadorPosicion(22, plantillaTemp, tipoAlineacion);
            alineacionDefitiva.Insert(22, jugadorElegido);
            plantillaTemp.Remove(jugadorElegido); 
            */

            return alineacionDefitiva;
        }

        private JugadorEntity obtenerAla(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;

            JugadorEntity jAux = null;


            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;


                switch (tipoAlineacion)
                {
                    case "boards.ie": break;
                    case "blackoutrugbyengland.myfreeforum.org": break;
                    case "hkblackout.motionforum.net": break;
                    case "walesbr.forum7.biz": break;
                    case "Mi_criterio": puntuacionActual = jAux.velocidad.toInt() * 5 + jAux.ataque.toInt() * 2 + jAux.agilidad.toInt(); break;
                }
                csr = jAux.csr;
                if (puntuacionActual > puntuacionElegido)
                {
                    puntuacionElegido = puntuacionActual;
                    posElegido = i;
                    csrElegido = csr;
                }
                else if (puntuacionActual == puntuacionElegido)
                {
                    if (csr > csrElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }

                }


            }

            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerCentro(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;
                switch (tipoAlineacion)
                {
                    case "boards.ie": break;
                    case "blackoutrugbyengland.myfreeforum.org": break;
                    case "hkblackout.motionforum.net": break;
                    case "walesbr.forum7.biz": break;
                    case "Mi_criterio": puntuacionActual = jAux.manejo.toInt() * 4 /*+ jAux.tecnica.toInt() * 3*/ + jAux.ataque.toInt() * 2 + jAux.defensa.toInt() * 2 + jAux.agilidad.toInt() + jAux.velocidad.toInt();
                        break;
                }
                csr = jAux.csr;
                if (puntuacionActual > puntuacionElegido)
                {
                    puntuacionElegido = puntuacionActual;
                    posElegido = i;
                    csrElegido = csr;
                }
                else if (puntuacionActual == puntuacionElegido)
                {
                    if (csr > csrElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }



                }
            }



            try { return js.ElementAt(posElegido); }
            catch (Exception e) { return new JugadorEntity(); }
        }

        private JugadorEntity obtener8(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;
                if (jAux.peso > 98)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio": puntuacionActual = jAux.tecnica.toInt() * 3 + jAux.manejo.toInt() * 2 + jAux.defensa.toInt() + jAux.ataque.toInt() + jAux.resistencia.toInt() + jAux.agilidad.toInt() + jAux.velocidad.toInt() + jAux.pateo.toInt();
                            break;
                    }
                    csr = jAux.csr;
                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }
            }


            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerFlankerCerrado(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;
                if (jAux.peso > 100)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio": puntuacionActual = jAux.defensa.toInt() * 4 + jAux.tecnica.toInt() * 3 + jAux.resistencia.toInt() * 2 + jAux.fuerza.toInt() * 2 + jAux.manejo.toInt() ;
                            break;
                    }
                    csr = jAux.csr;

                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }
            }



            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerFlankerAbierto(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;
                if (jAux.peso > 90)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio": puntuacionActual = jAux.defensa.toInt() * 4 + jAux.manejo.toInt() * 3 + jAux.tecnica.toInt() * 2 + jAux.resistencia.toInt()*2 + jAux.fuerza.toInt() + jAux.velocidad.toInt();
                                break;
                    }
                    csr = jAux.csr;
                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }
            }



            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerZaguero(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;


                switch (tipoAlineacion)
                {
                    case "boards.ie": break;
                    case "blackoutrugbyengland.myfreeforum.org": break;
                    case "hkblackout.motionforum.net": break;
                    case "walesbr.forum7.biz": break;
                    case "Mi_criterio": puntuacionActual = jAux.defensa.toInt() * 6 + jAux.pateo.toInt() * 2 + jAux.velocidad.toInt() + jAux.agilidad.toInt();
                        break;
                }
                csr = jAux.csr;
                if (puntuacionActual > puntuacionElegido)
                {
                    puntuacionElegido = puntuacionActual;
                    posElegido = i;
                    csrElegido = csr;
                }
                else if (puntuacionActual == puntuacionElegido)
                {
                    if (csr > csrElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }

                }

            }



            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerApertura(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;

            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);

                string nombre = jAux.nombre + " " + jAux.apellido;

                switch (tipoAlineacion)
                {
                    case "boards.ie": break;
                    case "blackoutrugbyengland.myfreeforum.org": break;
                    case "hkblackout.motionforum.net": break;
                    case "walesbr.forum7.biz": break;
                        //Revisar.
                    case "Mi_criterio": puntuacionActual = jAux.pateo.toInt() * 6 + jAux.manejo.toInt() * 5 + jAux.ataque.toInt() * 2 + jAux.resistencia.toInt() * 2 + jAux.velocidad.toInt() + jAux.tecnica.toInt() + jAux.defensa.toInt();
                        break;
                }
               
                csr = jAux.csr;
                if (puntuacionActual > puntuacionElegido)
                {
                    puntuacionElegido = puntuacionActual;
                    posElegido = i;
                    csrElegido = csr;
                }
                else if (puntuacionActual == puntuacionElegido)
                {
                    if (csr > csrElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }

                }

            }



            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerMM(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;
            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);
                string nombre = jAux.nombre + " " + jAux.apellido;

                switch (tipoAlineacion)
                {
                    case "boards.ie": break;
                    case "blackoutrugbyengland.myfreeforum.org": break;
                    case "hkblackout.motionforum.net": break;
                    case "walesbr.forum7.biz": break;
                    case "Mi_criterio":
                        puntuacionActual = jAux.manejo.toInt() * 6 + jAux.pateo.toInt() * 4 + jAux.ataque.toInt() * 2 + jAux.resistencia.toInt() * 2 + jAux.velocidad.toInt() + jAux.tecnica.toInt() + jAux.defensa.toInt();
                        break;
                }

                csr = jAux.csr;
                if (puntuacionActual > puntuacionElegido)
                {
                    puntuacionElegido = puntuacionActual;
                    posElegido = i;
                    csrElegido = csr;
                }
                else if (puntuacionActual == puntuacionElegido)
                {
                    if (csr > csrElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }

                }

            }

            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerLock(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;
            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);

                string nombre = jAux.nombre + " " + jAux.apellido;

                if (jAux.altura > 195 && jAux.peso > 100)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio": puntuacionActual = jAux.salto.toInt() * 4 + jAux.fuerza.toInt() * 3 + jAux.manejo.toInt() * 2 + jAux.altura + jAux.tecnica.toInt() + jAux.defensa.toInt() + jAux.ataque.toInt();
                            break;
                    }
                    csr = jAux.csr;
                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }

            }


            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }
        

        private JugadorEntity obtenerPilier(List<JugadorEntity> js, string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            float puntuacionElegido = 0;
            float puntuacionActual = 0;


            JugadorEntity jAux = null;
            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);

                if (jAux.altura < 188 && jAux.peso > 100)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio": puntuacionActual = jAux.fuerza.toInt() * 3 + jAux.tecnica.toInt() * 2 + jAux.resistencia.toInt() + (float)jAux.peso / 2;
                            break;
                    }
                    csr = jAux.csr;
                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }

            }


            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }

        private JugadorEntity obtenerTalona(List<JugadorEntity> js,string tipoAlineacion)
        {
            int posElegido = 0;
            int csr = 0;
            int csrElegido = 0;
            int puntuacionElegido = 0;
            int puntuacionActual = 0;


            JugadorEntity jAux = null;
            for (int i = 0; i < js.Count; i++)
            {
                jAux = js.ElementAt(i);

                string nombre = jAux.nombre + " " + jAux.apellido;

                if (jAux.altura < 188 && jAux.peso > 100)
                {
                    switch (tipoAlineacion)
                    {
                        case "boards.ie": break;
                        case "blackoutrugbyengland.myfreeforum.org": break;
                        case "hkblackout.motionforum.net": break;
                        case "walesbr.forum7.biz": break;
                        case "Mi_criterio":

                            puntuacionActual = jAux.manejo.toInt() * 3 + jAux.tecnica.toInt() * 2 + jAux.fuerza.toInt();
                    
                            break;
                    }
                    csr = jAux.csr;
                    if (puntuacionActual > puntuacionElegido)
                    {
                        puntuacionElegido = puntuacionActual;
                        posElegido = i;
                        csrElegido = csr;
                    }
                    else if (puntuacionActual == puntuacionElegido)
                    {
                        if (csr > csrElegido)
                        {
                            puntuacionElegido = puntuacionActual;
                            posElegido = i;
                            csrElegido = csr;
                        }

                    }

                }

            }


            try
            {
                return js.ElementAt(posElegido);

            }
            catch (Exception e)
            {
                return new JugadorEntity(); ;
            }
        }






        private List<JugadorEntity> calcularAlineacionSegunBlackoutrugbyengland(string tipoAlineacion, List<JugadorEntity> js)
        {
            throw new NotImplementedException();
        }

        private List<JugadorEntity> calcularAlineacionSegunHkblackout(string tipoAlineacion, List<JugadorEntity> js)
        {
            throw new NotImplementedException();
        }

        private List<JugadorEntity> calcularAlineacionSegunWalesbr(string tipoAlineacion, List<JugadorEntity> js)
        {
            throw new NotImplementedException();
        }

        private List<JugadorEntity> calcularAlineacionSegunBoards(string tipoAlineacion, List<JugadorEntity> js)
        {
            /*List<JugadorEntity> alineacionDefitiva = new List<JugadorEntity>();
            JugadorEntity jugadorElegido = new JugadorEntity();

            jugadorElegido = calculaMejorjugadorPosicion(1, js, tipoAlineacion);
            alineacionDefitiva.Insert(1, jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(3, js, tipoAlineacion);
            alineacionDefitiva.Insert(3, jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(2, js, tipoAlineacion);
            alineacionDefitiva.Insert(2, jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(4, js, tipoAlineacion);
            alineacionDefitiva.Insert(4, jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(5, js, tipoAlineacion);
            alineacionDefitiva.Insert(5,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(6, js, tipoAlineacion);
            alineacionDefitiva.Insert(6,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(7, js, tipoAlineacion);
            alineacionDefitiva.Insert(7,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(8, js, tipoAlineacion);
            alineacionDefitiva.Insert(8,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(9, js, tipoAlineacion);
            alineacionDefitiva.Insert(9,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(10, js, tipoAlineacion);
            alineacionDefitiva.Insert(10,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(11, js, tipoAlineacion);
            alineacionDefitiva.Insert(11,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(12, js, tipoAlineacion);
            alineacionDefitiva.Insert(12,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(13, js, tipoAlineacion);
            alineacionDefitiva.Insert(13,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(14, js, tipoAlineacion);
            alineacionDefitiva.Insert(14,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(15, js, tipoAlineacion);
            alineacionDefitiva.Insert(15,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(16, js, tipoAlineacion);
            alineacionDefitiva.Insert(16,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(17, js, tipoAlineacion);
            alineacionDefitiva.Insert(17,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(18, js, tipoAlineacion);
            alineacionDefitiva.Insert(18,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(19, js, tipoAlineacion);
            alineacionDefitiva.Insert(19,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(20, js, tipoAlineacion);
            alineacionDefitiva.Insert(20,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(21, js, tipoAlineacion);
            alineacionDefitiva.Insert(21,jugadorElegido);
            js.Remove(jugadorElegido); 

            jugadorElegido = calculaMejorjugadorPosicion(22, js, tipoAlineacion);
            alineacionDefitiva.Insert(22,jugadorElegido);
            js.Remove(jugadorElegido); 

            */
            return null;

        }

        public ActionResult InfoEntremanimento(int idEquipo = 0)//82565
        {
            srvEquipo = ServicioEquipo.getInstance((int)Session["idEquipo"]);
            ModeloInfoEntrenamiento model = new ModeloInfoEntrenamiento();

            model.respuesta = srvEquipo.recuperarInfoEntrenamiento(idEquipo);
            

            return View(model);
        }
        





    }
}
